package question70;

/**
 * 70. 爬楼梯
 * 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
 * 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢？
 * 示例 1：
 * 输入：n = 2
 * 输出：2
 * 解释：有两种方法可以爬到楼顶。
 * 1. 1 阶 + 1 阶
 * 2. 2 阶
 * 示例 2：
 * 输入：n = 3
 * 输出：3
 * 解释：有三种方法可以爬到楼顶。
 * 1. 1 阶 + 1 阶 + 1 阶
 * 2. 1 阶 + 2 阶
 * 3. 2 阶 + 1 阶
 *
 */
class Solution {
    // 到达第x楼的表达式可写为f(x) = f(x-1) + f(x-2)
    public int climbStairs(int n) {
        // 已知f(2)=2,f(1)=1,f(0)就等于1了
        int s0 = 1; // 到0楼的方案数
        int s1 = 1; // 到1楼的方案数

        for(int i = 2; i <=n; i ++){
            int newStep = s0 + s1;
            s0 = s1;
            s1 = newStep;
        }

        return s1;
    }
}
